//[前端模块化规范]

//●AMD（Asynchronous Module Definition）：异步模块定义规范。
//专门用于浏览器端，模块的加载是异步的。
//AMD主要通过require.js实现模块化。（通过define方法，将代码定义成模块；通过require方法，实现代码的模块加载。）
//目前用的很少，很少，了解即可。

//在require.js中，使用require.js提供的函数require（）来应用一个模块
require(['模块文件的路径(不带.js后缀)',function(){
//模块加载成功之后的回调函数
}])

//●CMD（Common Module Definition）：公共模块定义规范。
//CMD是另一种Js模块化方案，它与AMD很类似。
//不同点在于：AMD推崇依赖前置、提前执行；CMD推崇依赖就近，延迟执行。
//CMD主要通过sea.js实现此规范。
//目前看到的很少，很少，了解即可。

//使用define函数，传入的一般是一个函数，这个函数接受三个参数，分别是require、exports、module。
    define(function(require,exports,module){
        const a=require('a')//同步导入
        const b=require.async('b',function(b){
            console.log(b);
        })//异步导入
    })

    //●CommomJS
    //Node.js是Common]s的主要实践者，Node.js中内置common]S。
    //接下来我们学习的模块化语法，就是Common.js。

    //[概述]
    //每个文件就是一个模块，有自己的作用域。在一个文件里面定义的变量、函数、类，都是私有的，对其他文件不可见。
    //在服务器端，模块的加载是运行时同步加载的。在浏览器端，模块需要提前编译打包处理。

    //[特点]
    //所有的代码都运行在模块作用域，不会污染全局作用域。
    //模块可以多次加载，但是只会在第一次加载是运行一次，然后运行结果就被缓存了，以后再加载，就直接读取缓存结果。
    //模块加载的顺序，按照其在代码中出现的顺序。

    //[语法]
    //暴露模块
    //module exports=value
    //exports xxx=value
    //引入模块
    //require（xxx）
    //在第三方模块中，xxx为模块名。在自定义模块中，xxx为模块文件路径。

    //●ESM（常用，JS官方语法，vue中使用）：ES6 Module
    //ES6在语言标准的层面上，实现了模块功能，逐渐会成为浏览器和服务器通用的模块解决方案。
    
    //导出模块：export//引入模块：import